
import java.util.ArrayList;
import java.util.concurrent.Semaphore;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Nicolas
 */
public class Tampon {

    private ArrayList<String> tampon;
    private int taille=3;
    private Semaphore vide = new Semaphore(0);
    private Semaphore plein = new Semaphore(taille);

    public Tampon()
    {
        this.tampon = new ArrayList<String>();
    }
    
    public String getElementTampon()
    {
        String str = null;
        try
        {
            //On ajoute une case vide
            vide.acquire();            
            synchronized (this)
            {
                str = tampon.get(0);
                tampon.remove(0);
            }
            //On eneleve une case pleine
            plein.release();
        }
        catch (InterruptedException ex)
        {
            System.out.println(ex.getMessage());
            Logger.getLogger(Tampon.class.getName()).log(Level.SEVERE, null, ex);
        }        
        return str;
        
    }

    public  void setElementTampon(String message)
    {
        try
        {            
            //On prend une case pleine
            plein.acquire();
            //On ajoute le message dans le tampon
            synchronized (this)
            {
                tampon.add(message);
            }
            //On eneleve une case vide
            vide.release();         
        }
        catch (InterruptedException ex)
        {
            Logger.getLogger(Tampon.class.getName()).log(Level.SEVERE, null, ex);
        }        
     }
}
